#ifndef GY_GRAPHICSREFLECTION_H
#define GY_GRAPHICSREFLECTION_H

#include <QObject>
#include <ReflectionAPI/GY_ReflectionClass.h>
#include "BasicGraphics/GY_GraphicsCenterItem.h"
#include "BasicGraphics/GY_GraphicsEditItem.h"
#include "BasicGraphics/GY_GraphicsLineItem.h"
#include "BasicGraphics/GY_GraphicsRotTick.h"
#include "BasicGraphics/GY_GraphicsEllipseItem.h"
#include "BasicGraphics/GY_GraphicsLinearTick.h"
#include "BasicGraphics/GY_GraphicsCrown.h"
#include "Graphics/BasicGraphics/GY_GraphicsCircleItem.h"
#include "Graphics/BasicGraphics/GY_GraphicsCornerStyleRect.h"
#include "Graphics/BasicGraphics/GY_GraphicsCornerStyleRectItem.h"
#include "Graphics/BasicGraphics/GY_GraphicsWideTextItem.h"
#include "Graphics/BasicGraphics/GY_GraphicsPolygon.h"
#include "Graphics/BasicGraphics/GY_GraphicsPolygonRegular.h"
#include "Graphics/BasicGraphics/GY_GraphicsPolyline.h"
#include "Graphics/BasicGraphics/GY_GraphicsArcItem.h"
#include "Graphics/BasicGraphics/GY_GraphicsBezier.h"
#include "Graphics/BasicGraphics/GY_GraphicsFillet.h"
#include "Graphics/BasicGraphics/GY_GraphicsImage.h"
#include "Graphics/BasicGraphics/GY_GraphicsRectWidthHeight.h"
#include "Graphics/ContainerGraphics/GY_GraphicalObject.h"
#include "Graphics/ContainerGraphics/GY_ClippingRegion.h"
#include "Graphics/ContainerGraphics/GY_MutuallyExclusiveGroup.h"
#include "Graphics/ContainerGraphics/GY_SimpleGroup.h"
#include "Graphics/ContainerGraphics/GY_StencilGroup.h"
#include "Graphics/ContainerGraphics/GY_TransformGroup.h"
#include "Graphics/ContainerGraphics/GY_Button.h"
#include "Graphics/ContainerGraphics/GY_KnobFinite.h"
#include "Graphics/ContainerGraphics/GY_ADI.h"
#include "Graphics/ContainerGraphics/GY_BarChartHoriz.h"
#include "Graphics/ContainerGraphics/GY_BarChartVert.h"
#include "Graphics/ContainerGraphics/GY_DialCircular.h"
#include "Graphics/ContainerGraphics/GY_DialFinite.h"
#include "Graphics/ContainerGraphics/GY_TapeCircular.h"
#include "Graphics/ContainerGraphics/GY_TapeFinite.h"
#include "Graphics/ContainerGraphics/GY_ClippingToolContainer.h"
#include "Graphics/ReplicationGraphics/GY_ObjectGroup.h"
#include "Graphics/BasicGraphics/GY_GraphicsRectWidthHeightItem.h"
#include "Graphics/ContainerGraphics/GY_ButtonItem.h"
#include "Graphics/ContainerGraphics/GY_AttributesGroup.h"
#include "Graphics/ContainerGraphics/GY_RepeatGroup.h"
#include "Graphics/DataObjects/GY_BoolData.h"
#include "Graphics/DataObjects/GY_ColorData.h"
#include "Graphics/DataObjects/GY_CoordData.h"
#include "Graphics/DataObjects/GY_FloatData.h"
#include "Graphics/DataObjects/GY_DoubleData.h"
#include "Graphics/DataObjects/GY_IntData.h"
#include "Graphics/DataObjects/GY_StringData.h"
#include "Graphics/DataObjects/GY_ColorArray.h"
#include "Graphics/DataObjects/GY_DoubleArray.h"
#include "Graphics/DataObjects/GY_CoordArray.h"
#include "Graphics/DataObjects/GY_FloatArray.h"
#include "Graphics/DataObjects/GY_IntArray.h"
#include "Graphics/DataObjects/GY_StringArray.h"
#include "Graphics/ContainerGraphics/GY_Scale.h"
#include "Graphics/ContainerGraphics/GY_ScaleToFitGroup.h"
#include "Graphics/Calculators/GY_FormatFloat.h"
#include "Graphics/Calculators/GY_FormatDouble.h"
#include "Graphics/Calculators/GY_Timer.h"
#include "Graphics/Calculators/GY_SignalGenerator.h"
#include "Graphics/BasicGraphics/GY_RectActiveArea.h"
#include "Graphics/ContainerGraphics/GY_Switch.h"
#include "Graphics/BasicGraphics/GY_PolarActiveArea.h"
#include "Graphics/Calculators/GY_ConcatStrings.h"
#include "Graphics/Calculators/GY_ConcatWStrings.h"
#include "Graphics/Calculators/GY_SystemClock.h"
#include "Graphics/BasicGraphics/GY_GraphicsBezierItem.h"
#include "Graphics/ContainerGraphics/GY_Bezel.h"

class GY_CONTROLLIBRARY_EXPORT GY_GraphicsReflection : public QObject
{
    Q_OBJECT
private:
    explicit Q_INVOKABLE GY_GraphicsReflection(QObject *parent = nullptr);

public:
    /**
     * @brief getInstance 获取对象指针
     * @param parent 父类
     * @return 对象指针
     */
    static GY_GraphicsReflection* getInstance(QObject *parent = nullptr);
    /**
     * @brief release 释放对象指针
     */
    static void release();
    /**
     * @brief initRegisterObject 注册图元类
     */
    void initRegisterObject();
    void registerObjectClass(const QString& className);
    /**
     * @brief registerObjectClass 反射基类
     * @param className 类名
     */
    QObject* newInstanceObjectClass(const QByteArray& className,const QString& guid);
signals:

private:
    GY_ReflectionClass* m_pReflectionClass = nullptr;
    static GY_GraphicsReflection* m_pGraphicsReflection;
};

#endif // GY_GRAPHICSREFLECTION_H
